//得到对象中值，访问字符串
import { RemoveFirst } from "./9.KebabCase";
type ObjectAccessPaths<
  T,
  F extends string = "",
  K = keyof T
> = K extends keyof T // 这里目的是为了将联合类型K，进行分发分别取值
  ? T[K] extends object
    ? ObjectAccessPaths<T[K], `${F}.${K & string}`> //  如果当前的值是对象继续递归拼接， 并且将当前解析的key 拼接到结果集中
    : RemoveFirst<`${F}.${K & string}`, "."> // 这里会丢失不是对象的最后一个key，需要加入到结果集中
  : never;
function createI18n<T>(schema: T): (path: ObjectAccessPaths<T>) => void {
  return (path) => {};
}

const i18n = createI18n({
  home: {
    topBar: {
      title: "顶部标题",
      welcome: "欢迎登录",
    },
    bottomBar: {
      notes: "xx备案,xx版权归所有",
    },
  },
  login: {
    usename: "zh",
    password: "33333",
  },
});
